package com.itcat.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itcat.api.mysql.PmsProductAttributeApi;
import com.itcat.api.mysql.PmsProductAttributeCategoryApi;
import com.itcat.common.CommonPage;
import com.itcat.mysql.param.PageParam;
import com.itcat.mysql.pojo.PmsProductAttribute;
import com.itcat.mysql.pojo.PmsProductAttributeCategory;
import com.itcat.mysql.pojo.PmsProductCategoryDto;
import com.itcat.mysql.vo.PmsProductAttributeCategoryVo;
import com.itcat.mysql.vo.PmsProductAttributeVo;
import com.itcat.service.PmsProductAttributeCategoryService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
* @author 小心触碰的电脑
* @description 针对表【pms_product_attribute_category(产品属性分类表)】的数据库操作Service实现
* @createDate 2022-04-02 23:08:33
*/
@Service
public class PmsProductAttributeCategoryServiceImpl implements PmsProductAttributeCategoryService{

    @DubboReference
    private PmsProductAttributeCategoryApi pmsProductAttributeCategoryApi;

    @DubboReference
    private PmsProductAttributeApi pmsProductAttributeApi;

    /**
     * 分页查询商品属性分类
     * @param pageParam
     * @return
     */
    @Override
    public CommonPage<PmsProductAttributeCategory> categoryList(PageParam pageParam) {
        Page<PmsProductAttributeCategory> page = pmsProductAttributeCategoryApi.categoryList(pageParam);
        return CommonPage.restPage(page);
    }

    /**
     * 添加商品属性分类
     * @param
     */
    @Override
    public void categoryCreate(PmsProductAttributeCategory pmsProductAttribute) {
        pmsProductAttributeCategoryApi.save(pmsProductAttribute);
    }

    /**
     * 删除商品属性分类
     * @param id
     */
    @Override
    public void delete(Integer id) {
        pmsProductAttributeCategoryApi.delete(id);
    }

    /**
     * 获取所有商品属性分类及其下属性
     * @return
     */
    @Override
    public List<PmsProductAttributeCategoryVo> categoryWithAttr() {

        // 查询所有的商品属性分类
        List<PmsProductAttributeCategory> list = pmsProductAttributeCategoryApi.listAll();

        //构建vos对象
        List<PmsProductAttributeCategoryVo> vos = new ArrayList<>();

        // 通过商品属性分类查找下属性
        for (PmsProductAttributeCategory category : list) {
            List<PmsProductAttribute> vo = pmsProductAttributeApi.findByCategoryId(category.getId());
            PmsProductAttributeCategoryVo categoryVo = PmsProductAttributeCategoryVo.init(category, vo);
            vos.add(categoryVo);
        }

        return vos;
    }

    /**
     * 更新商品属性分类
     * @param pmsProductAttributeCategory
     */
    @Override
    public void update(PmsProductAttributeCategory pmsProductAttributeCategory) {
        pmsProductAttributeCategoryApi.update(pmsProductAttributeCategory);
    }

    /**
     * 根据id获取商品属性分类
     * @param id
     * @return
     */
    @Override
    public PmsProductAttributeCategory getById(Integer id) {
        PmsProductAttributeCategory p = pmsProductAttributeCategoryApi.getById(id);
        return p;
    }

    @Override
    public void create(PmsProductCategoryDto pmsProductAttributeCategory) {
        pmsProductAttributeCategoryApi.savez(pmsProductAttributeCategory);
    }
}
